Für die Arbeit mit SQL Tasks sind administrative Berechtigungen im Asset Manager notwendig. |
Ursprünglich war geplant, dass der Asset Manager nur auf einem vollwertigen Microsoft SQL Server laufen sollte, da ebenfalls geplant war, SQL-Jobs für bestimmte Aufgaben zu verwenden. Bei diesen Aufgaben handelt es sich um regelmäßig wiederkehrende Aufrufe von SQL-Skripten, die zur Laufzeit technische Inventurdaten mit kaufmännischen Daten verbinden. Das ist u.a. das, was einen Asset Manager von einer simplen Inventurlösung unterscheidet. In der Realität ließ sich dieses Vorhaben aber nicht durchsetzen, da Anwender immer wieder auch SQL Express verwenden wollten. Diese SQL Server Variante besitzt aber keinen SQL Agenten und somit auch keine SQL-Jobs. Um dennoch den Aufruf zeitgesteuerter SQL-Skripte realisieren zu können, wurden SQL Tasks implementiert.
Als Einstiegspunkt fungiert die SQL-Tabelle __scheduledTasks. Dort werden die einzelnen Scheduled Tasks gespeichert mit folgenden Informationen:
Die Tabelle __scheduledTasks besitzt einen CLR-Trigger, der auf INSERT, UPDATE und DELETE reagiert. Wird dieser Trigger aktiv, liest er zunächst aus der Tabelle __dbVersion den Wert der Spalte WebServiceUrl. Entsprechend der ausgelösten Operation geschieht folgendes:
Wie zu erkennen ist, wird die Datei RunTask.exe als ausführbares Programm beim Windows Task Scheduler registriert. Startet nun der Task zur angegebenen Uhrzeit, ruft RunTask.exe die Asset Manager Web Service Funktion RunScheduledTask() auf. Diese wiederum liest aufgrund der übergebenen GUID das passende SQL-Skript aus der Tabelle __scheduledTasks, führt es aus und aktualisiert anschließend die Spalten LastRuntime und LastUpdate der Tabelle __scheduledTasks.
Manch einer mag sich beim Lesen der letzten Absätze gefragt haben, warum immer wieder der "umständliche Weg" über die Asset Manager Web Service Funktionen gegangen wird. Die Antwort ist einfach: Weil dort die gesamte Geschäftslogik des Asset Managers beheimatet ist. Diesem Prinzip wollte der Entwickler treu bleiben. Richtig spannend wird es aber erst, wenn Asset Manager Web Service und SQL-Server unbedingt auf unterschiedlichen Maschinen installiert werden sollen. Auch eine Anforderung, bei der die Frage gestellt werden darf, wozu die Kommunikation zwischen Client und Server mit Verschlüsselung und Kompression auf Geschwindigkeit optimiert wurde, um am Ende alle Daten doppelt über das Netzwerk zu transportieren. Aber das ist ein anderes Kapitel.
Aus Sicht des Anwenders lassen sich SQL Tasks über das Hauptmenü administrieren:
Daraufhin öffnet sich eine Liste der SQL Tasks. Mittels Kontextmenü lassen sich nun SQL Tasks starten, erstellen, bearbeiten und löschen:
Um einen neuen SQL Task zu erstellen, müssen zunächst ein Name, sowie eine optionale Beschreibung eingegeben werden. Anschließend können Tagesintervall und Startzeit definiert werden.
Abschließend erfolgt die Eingabe des SQL-Skripts im Feld SQL-Abfrage. Wie das geht, ist hier und hier beschrieben. Nach der Bestätigung mit Ok wird der SQL Task gespeichert und steht zur Verfügung.